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