#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; }