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

#define ull unsigned long long
#define ll long long
#define mod 1000000007
#define fi first
#define se second
#define pb push_back
#define mkp make_pair
#define PI acos(-1.0)
const int N=1e5 + 5;
const int M=1e6 + 5;

ll mod_exp(ll cur,ll power)
{
    ll res=1;
    while(power>0){
        if(power%2==0){
            cur=(cur*cur)%mod;
        }
        else{
            res=(res*cur)%mod;
            cur=(cur*cur)%mod;    
        }
        power/=2;
    }
    return res;
}
ll fun(ll a , ll b)
{
    if(a>=0) return a%b;
    a=-a;
    a=a%b;
    return (b-a)%b;
}
bool vis[N];
        
vector <int> g[N];
void dfs(int s)
{
    vis[s]=true;
    for(int i=0;i<g[s].size();i++){
        if(!vis[g[s][i]]) dfs(g[s][i]);
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    int tt;
    cin>>tt;
    int i,j;
    bool is[M];
    for(i=0;i<M;i++){
        is[i]=true;
    }

    is[0]=is[1]=false;
    for(i=2;i*i<M;i++){
        if(!is[i]) continue;
        for(j=2*i;j<M;j+=i){
            is[j]=false;
        }
    }
    vector <int> v[M];
    for(i=2;i<M;i++){
        if(!is[i]) continue;
        for(j=i;j<M;j+=i){
            v[j].pb(i);
        }
    }
    while(tt--){
        int n,s[N],id[M];
        cin>>n;
        for(i=0;i<n;i++){
            cin>>s[i];
        }
        ll cnt=0;
        bool dn[M];
        for(i=0;i<M;i++){
            dn[i]=false;
            id[i]=-1;
        } 
        for(i=0;i<n;i++){
            bool ok=true;
            for(j=0;j<v[s[i]].size();j++){
               // cout << v[s[i]][j] << " ";
                if(dn[v[s[i]][j]]){
                   // cout << id[v[s[i]][j]] << " " << i << endl;
                    ok=false;
                    g[id[v[s[i]][j]]].pb(i);
                    g[i].pb(id[v[s[i]][j]]);
                } else{
                    dn[v[s[i]][j]]=true;
                    id[v[s[i]][j]]=i;
                }
                
            }
           // cout << endl;
            //if(ok) cnt++;
        }
        for(i=0;i<n;i++) vis[i]=false;
        for(i=0;i<n;i++){
            if(!vis[i]){
                cnt++;
                dfs(i);
            }
        }
        //cout << cnt << endl;
        ll ans = mod_exp(2,cnt);
        ans=fun(ans-2,mod);
        cout << ans << endl;
        for(i=0;i<n;i++) g[i].clear();
    }

        
    
        
    return 0;
}