#include<bits/stdc++.h>
using namespace std;
vector<long int > v[1000007];
bool present[1000007],vis[1000007],prime[1000007];
void sieve()
{
    long int n=1e6,i,j;
    for(i=2;i<=n;i++)
    {  
        if(prime[i]==0)
        {
            for(j=2;j*i<=n;j++)
            {
                prime[i*j]=1;
                if(present[i*j]==1)
                {
                    v[i].push_back(i*j);
                    v[i*j].push_back(i);
                }
            }
        }
    }
};

void DFS(long int p)
{
    vis[p]=1;
    long int n,i;
    n=v[p].size();
    for(i=0;i<n;i++)
    {
        if(vis[v[p][i]]==0)
        {
            DFS(v[p][i]);
        }
    }
};
long long int mod=1e9+7;

long long int pwr(long long int cnt)
{
    if(cnt==0)
    {
        return 1;
    }
    else if(cnt==1)
    {
        return 2;
    }
    long long int p=pwr(cnt/2);
    p=(p*p)%mod;
    if(cnt%2==1)
    {
        p=(p*2)%mod;
    }
    return p;
};



int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        long int n,i;
        long int p,cnt=0,c2=0;
        for(i=0;i<=1e6;i++)
        {
            present[i]=vis[i]=0;
            v[i].clear();
        }
        cin>>n;
        for(i=0;i<n;i++)
        {
            cin>>p;
            present[p]=1;
            if(p==1)
            {
                cnt++;
            }
        }
        sieve();
        for(i=2;i<=1e6;i++)
        {
            if((present[i]==1)&&(vis[i]==0))
            {
                //cout<<i<<endl;
                DFS(i);
                cnt++;
            }
        }
        //cout<<cnt<<endl;
        long long int ways=pwr(cnt);
        ways=((ways-2)%mod+mod)%mod;
        cout<<ways<<endl;
    }
    return 0;
}