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

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

bool np[N];
vector<int> dvs[N];
vector<int> mul[N];
vector<int> prime;
int par[N];

int anc(int u) { return par[u] == u ? u : par[u] = anc(par[u]); }
void join(int u,int v) {
    par[anc(v)] = anc(u);
} 

int main() {
    ios_base::sync_with_stdio(false);
    np[0] = np[1] = 1;
    for (int i = 2; i < N; ++i) if (!np[i]) {
        dvs[i].push_back(i);
        prime.push_back(i);
        for (int j = i + i; j < N; j += i) {
            np[j] = 1;
            dvs[j].push_back(i);
        }
    }
    int t; cin >> t;
    while (t--) {
        int n; cin >> n;
        for (int i = 1; i <= n; ++i) {
            par[i] = i;
        }
        for (int p : prime) mul[p].clear();
        for (int i = 1; i <= n; ++i) {
            int x; cin >> x;
            for (int p : dvs[x]) mul[p].push_back(i);
        }
        for (int p : prime) {
            for (int i = 1; i < mul[p].size(); ++i) {
                join(mul[p][i], mul[p][i - 1]);
            }
        }
        int ret = 1;
        for (int i = 1; i <= n; ++i) if (anc(i)  == i) {
            ret += ret; if (ret >= mod) ret -= mod;
        }
        ret -= 2; if (ret < 0) ret += mod;
        cout << ret << '\n';
    }
}