#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;

typedef
tree<
  int,
  null_type,
  less<int>,
  rb_tree_tag,
  tree_order_statistics_node_update>
ordered_set;

#define lli long long int
#define llu unsigned long long int
#define all(v) v.begin(),v.end()
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define F0(a) memset(a,0,sizeof(a));

const long double EPS = 1e-10;
const lli MOD = 1000000007ll;
const lli mod1 = 1000000009ll;
const lli mod2 = 1100000009ll;
int INF = 2147483645;
lli INFINF = 9223372036854775807;
int debug = 0;

int bit_count(int _x){int _ret=0;while(_x){if(_x%2==1)_ret++;_x/=2;}return _ret;}
lli bit(lli _mask,lli _i){return (_mask&(1<<_i))==0?0:1;}
lli powermod(lli _a,lli _b,lli _m=MOD){lli _r=1;while(_b){if(_b%2==1)_r=(_r*_a)%_m;_b/=2;_a=(_a*_a)%_m;}return _r;}
lli abmod(lli a,lli m=MOD){while(a>=m) a-=m; while(a<0) a+=m; return a;}
lli add(lli a,lli b,lli m=MOD){lli x=a+b;while(x>=m)x-=m;return abmod(x);}
lli sub(lli a,lli b,lli m=MOD){lli x=a-b;while(x<0)x+=m;return abmod(x);}
lli mul(lli a,lli b,lli m=MOD){lli x=a*b;x%=m;return abmod(x);}

#define N 1000010
int arr[N];
vector<int> v[N];
#define M 100010
bool u[M], x[N];
vector<int> vv[N];
int ans;

void dfs(int p, bool uu){
    if(uu){
        u[p] = true;
        for(int i:v[arr[p]])
            if(!x[i])
                dfs(i, !uu);
    }
    else{
        x[p] = true;
        for(int i:vv[p]){
            if(!u[i])
                dfs(i, !uu);
        }
    }
}

int main(){
    std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cout.precision(40);

    for(int i=2;i<N;i++){
        if(v[i].empty()){
            for(int j=i;j<N;j+=i)
                v[j].push_back(i);
        }
    }
    int t;
    cin >> t;
    int n;
    while(t--){
        cin >> n;
        for(int i=0;i<n;i++){
            cin >> arr[i];
            for(int j:v[arr[i]])
                vv[j].push_back(i);
        }
        for(int i=0;i<n;i++){
            if(!u[i]){
                dfs(i, true);
                ans++;
            }
        }
        cout << sub(powermod(2, ans), 2) << endl;
        ans = 0;
        fill(u, u+M, false);
        fill(x, x+N, false);
        for(int i=0;i<N;i++)
            vv[i].clear();
    }
    return 0;
}