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

const int maxn=100010;
const int mo=1e9+7;
int powmod(int a,int b)
{
    int ans=1;
    while (b)
    {
        if (b&1)    ans=(ans*1LL*a)%mo;
        a=(a*1LL*a)%mo;
        b>>=1;
    }
    return ans;
}
int f[maxn];
int a[maxn];
vector<int> b[1000010];
int n;

int fa(int t)
{
    if (f[t]==t)    return t;
    return f[t]=fa(f[t]);
}
void Union(int x,int y)
{
    x=fa(x);
    y=fa(y);
    if (x!=y)    f[x]=y;
}

int main()
{
    int te;
    scanf("%d",&te);
    for (int ca=1;ca<=te;ca++)
    {
        scanf("%d",&n);
        for (int i=1;i<=1000000;i++)    b[i].clear();
        for (int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            for (int j=2;j*j<=a[i];j++)
            if (a[i]%j==0)
            {
                b[j].push_back(i);
                while (a[i]%j==0)    a[i]/=j;
            }
            if (a[i]!=1)    b[a[i]].push_back(i);
        }
        for (int i=1;i<=n;i++)
            f[i]=i;
        for (int i=2;i<=1000000;i++)
        {
            for (int j=1;j<b[i].size();j++)
                Union(b[i][j-1],b[i][j]);
        }
        int ans=0;
        for (int i=1;i<=n;i++)
            if (f[i]==i)    ans++;
        ans=powmod(2,ans);
        ans=(ans-2+mo)%mo;
        printf("%d\n",ans);
    }
    return 0;
}