#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = 1e9 + 7;
const int MAX = 1e5 + 10;
const int MAX_A = 1e6 + 10;
vector<int> vec[MAX_A];
vector<int> v[MAX];
int color[MAX];

void dfs(int pos, int cl){
    color[pos] = cl;
    for(int a : v[pos]){
        if(!color[a]){
            dfs(a, cl);
        }
    }
}

int solve(){
    int n;
    cin >> n;
    for(int i = 0; i < MAX_A; i++){
        vec[i].clear();
    }
    for(int i = 1; i <= n; i++){
        int a;
        cin >> a;
        if(a == 1){
            continue;
        }
        for(int j = 2; j <= 1000; j++){
            if(a % j == 0){
                while(a % j == 0){
                    a /= j;
                }
                vec[j].push_back(i);
            }
        }
        if(a > 1){
            vec[a].push_back(i);
        }
    }
    for(int i = 1; i <= n; i++){
        v[i].clear();
        color[i] = 0;
    }
    for(int i = 0; i < MAX_A; i++){
        if(vec[i].size() >= 2){
            for(int j = 1; j < (int) vec[i].size(); j++){
                v[vec[i][j]].push_back(vec[i][j - 1]);
                v[vec[i][j - 1]].push_back(vec[i][j]);
            }
        }
    }
    int ans = 1;
    for(int i = 1; i <= n; i++){
        if(color[i] == 0){
            dfs(i, i);
            ans *= 2;
            ans %= MOD;
        }
    }
    ans += MOD - 2;
    ans %= MOD;
    return ans;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        cout << solve() << endl;
    }
    return 0;
}