//#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

#include <bits/stdc++.h>
// #include <bits/extc++.h>
using namespace std;

#define debug(s) cout << #s << " = " << s << endl
#define all(v) (v).begin(), (v).end()
#define KeepUnique(v) (v).erase( unique(all(v)), v.end() )
#define MEMSET(v, val) memset(v, val, sizeof (v))
#define PB push_back
#define endl '\n'
typedef long long ll;

inline int myrand(int l, int r) {
    int ret = rand(); ret <<= 15; ret ^= rand();
    if(ret < 0) ret = -ret; ret %= (r-l+1); ret += l;
    return ret;
}

template <typename F, typename S>
ostream& operator << (ostream& os, const pair< F, S>& p) {
    return os<<"(" <<p.first<<", "<<p.second<<")"; }

typedef pair<int, int> ii;

template<typename T> using min_pq =
    std::priority_queue<T, vector<T>, greater<T> >;

//int dx[] = {-1, +0, +1, +0};
//int dy[] = {+0, +1, +0, -1};

const int maxn = 100005;
const int mod = 1e9 + 7;

int n;
vector<int> v;
vector<int> g[maxn];
int vis[maxn];
int spf[1000005];

vector<int> ppf(int x) {
    set<int> st;
    while(x != 1) {
        st.insert(spf[x]);
        x /= spf[x];
    } vector<int> ret(st.begin(), st.end());
    return ret;
}

set<int> id[1000005];

void Visited(int u) {
    vector<int> pf = ppf(v[u]);
    for(int b : pf) {
        id[b].erase(u);
    }
}

void dfs(int uu) {
    queue<int> q;
    vis[uu] = 1;
    q.emplace(uu);
    Visited(uu);
    while(q.size()) {
        int u = q.front();
        q.pop();
        vector<int> pf = ppf(v[u]);
        vector<int> del;
        for(int b : pf) {
            for(int v : id[b]) {
                if(!vis[v]) {
                    q.emplace(v);
                    vis[v] = 1;
                    del.emplace_back(v);
                }
            }
        }
        for(int b : del) {
            Visited(b);
        }
    }
}

int qpow(int b, int p) {
    int ret = 1;
    while(p) {
        if(p & 1) ret = (1LL * ret * b) % mod;
        b = (1LL * b * b) % mod, p >>= 1;
    } return ret;
}

int32_t main () {
    // freopen("in", "r", stdin);
    memset(spf, 127, sizeof spf);
    for(int i = 2; i <= 1000000; i++) {
        if(spf[i] > 10000000) {
            for(int j = i; j <= 1000000; j += i) {
                spf[j] = min(spf[j], i);
            }
        }
    }
    int t; cin >> t;
    while(t--) {
        for(int i = 1; i <= 1000000; i++) {
            id[i].clear();
        }
        cin >> n;
        v.resize(n);
        for(int &b : v) cin >> b;
        for(int i = 0; i < v.size(); i++) {
            vector<int> pf = ppf(v[i]);
            for(int x : pf) {
                id[x].insert(i);
            }
        }
        memset(vis, 0, sizeof vis);
        int comp = 0;
        for(int i = 0; i < n; i++) {
            if(!vis[i]) {
                comp++;
                dfs(i);
            }
        }
        int ans = qpow(2, comp);
        if(ans < 2) ans = ans + mod - 2;
        else ans -= 2;
        cout << ans << endl;
    }
}