//  Author : RUTVIK KOTHARI
//  DA-IICT

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

#define ll long long
#define ull unsigned long long int
#define ld long double
#define all(x) x.begin(),x.end()
#define pll pair<ll,ll>
#define ff first
#define ss second
#define mod 1000000007
#define INFL LONG_MAX
#define pb push_back
#define FIO ios::sync_with_stdio(0); cin.tie(NULL);

ll powermodm(ll x,ll n,ll M){ll result=1;while(n>0){if(n % 2 ==1)result=(result * x)%M;x=(x*x)%M;n=n/2;}return result;}
ll power(ll _a,ll _b){ll _r=1;while(_b){if(_b%2==1)_r=(_r*_a);_b/=2;_a=(_a*_a);}return _r;}
ll gcd(ll a,ll b){while(a&&b)a>b?a%=b:b%=a;return a+b;}
ll lcm(ll a,ll b){return (max(a,b)/gcd(a,b))*min(a,b);}

vector <ll> adj[1000005];
ll dp[1000005];
void pre()
{
    ll i,j;
    for(i=2;i<=1000000;i++)dp[i]=1;
    for(i=2;i<=1000000;i++)
    {
        if(dp[i])
        {
            for(j=i;j<=1000000;j+=i)
            {
                if(j!=i)dp[j]=0;
                adj[j].pb(i);
            }
        }
    }
}

int main() 
{
    FIO;

    pre();
    ll t;
    cin>>t;
    while(t--)
    {
        ll n;
        cin>>n;
        ll a[n],i,j,mp[1000005]={0},temp=1;
        set <ll> s;
        for(i=0;i<n;i++)
        {
            cin>>a[i];
            if(a[i]!=1)    
            s.insert(a[i]);
            else
                temp++;
        }
        vector <ll> g1[1000005];
        for(auto it=s.begin();it!=s.end();it++)
        {
            ll val=*it;
            for(j=0;j<adj[val].size();j++)
                g1[adj[val][j]].pb(*it);
        }
        for(i=2;i<=1000000;i++)
        {
            if(!mp[i] && g1[i].size())
            {
                temp++;
                set <ll> ss;
                queue <ll> q;
                q.push(i);
                while(!q.empty())
                {
                    ll g=q.front();
                    q.pop();
                    for(j=0;j<g1[g].size();j++)
                    {
                        ll h=g1[g][j];
                        for(ll k=0;k<adj[h].size();k++)
                        {
                            if(!mp[adj[h][k]])
                            {
                                ss.insert(adj[h][k]);
                                q.push(adj[h][k]);
                                mp[adj[h][k]]=1;
                            }
                        }
                    }
                }
            }
        }
        
        
        
        temp--;
        ll ans=(powermodm(2,temp,mod)-2+mod)%mod;
        cout<<ans<<endl;
    }
    
    return 0;
}