#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

#define pb push_back
#define ppp pop_back
#define fi first
#define se second
#define pii pair<int,int>

const int N = 1e6 + 5;
const int p = 1e9 + 7;

vector<int> a;
int parent[N], depth[N];
vector<int> divs[N];
set<int> b, c;

void find_divs() {
    for (int m=2; m<N; m++) {
        int t = -1;
        for (int k=2; k*k<=m; k++) {
            if (m%k==0) {
                t = k;
                break;
            }
        }
        if (t == -1) divs[m].pb(m);
        else {
            int n = m/t;
            divs[m] = divs[n];
            int l = lower_bound(divs[m].begin(), divs[m].end(), t) - divs[m].begin();
            if (l == divs[m].size()) divs[m].pb(t);
            else if (divs[m][l] != t) divs[m].pb(t);
        }
    }
}

int find(int v) {
    if (v == parent[v]) return v;
    return parent[v] = find(parent[v]);
}

void merge(int u, int v) {
    u = find(u);
    v = find(v);
    if (depth[u] < depth[v]) swap(u,v);
    parent[v] = u;
    if (depth[u] == depth[v]) depth[u]++;
}

void merge_vec(vector<int> v) {
    if (v.size() == 1) return;
    for (int i=0; i<v.size()-1; i++) merge(v[i], v[i+1]);
}

ll mpow(int x, int n) {
    if (n==0) return 1;
    ll res = mpow(x, n/2);
    res = (res*res)%p;
    if (n&1) res = (res*x)%p;
    return res;
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
#endif
    find_divs();
    int t;
    cin >> t;
    for (int q=1; q<=t; q++) {
        for (int i=0; i<N; i++) {
            parent[i] = i;
            depth[i] = 0;
        }
        a.clear();
        b.clear();
        c.clear();
        int n;
        cin >> n;
        int ones = 0;
        for (int i=1; i<=n; i++) {
            int cur;
            cin >> cur;
            if (cur == 1) ones++;
            else a.pb(cur);
        }
        for (int i=0; i<a.size(); i++) {
            merge_vec(divs[a[i]]);
            for (int j=0; j<divs[a[i]].size(); j++) b.insert(divs[a[i]][j]);
        }
        for (auto it=b.begin(); it!=b.end(); it++) c.insert(find(*it));
        int k = c.size();
        ll res = mpow(2, k+ones);
        cout << res-2 << "\n";
    }
}