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

#define inf 0x3f3f3f3f
#define INF 1000111000111000111LL
#define mod 1000000007
#define pi acos(-1.0)
#define eps 1e-8
#define endl '\n'
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define fi first
#define se second
#define all(cc) (cc).begin(),(cc).end()
using lli = long long int ;
using pii = pair<int, int> ;
using vi = vector<int> ;
using vb = vector<bool> ;
using vvi = vector<vector<int>> ;
using vlli = vector<long long int> ;
using vpii = vector<pair<int, int>> ;

const int MX=1000000 ;

template<class T, int SZ> struct DSU
  {
    T p[SZ+1] ;
    DSU() { for(int i=0 ; i<=SZ ; i++) p[i]=i ; }
    T find(T i)
      {
        if(i!=p[i]) p[i]=find(p[i]) ;
        return p[i] ;
      }
    bool same(T i, T j) { return find(i)==find(j) ; }
    void unionset(T i, T j)
      {
        T x=find(i) ; T y=find(j) ;
        if(x!=y) p[x]=y ;
      }
  } ;

lli fast_exp(lli base, lli exp)
  {
    lli res=1 ;
    while(exp>0)
      {
        if(exp%2) res=(res*base)%mod ;
        base=(base*base)%mod ;
        exp/=2;
      }
    return res%mod ;
  }

int main()
  {
    ios_base::sync_with_stdio (false) ; cin.tie(0) ; cout.tie(0) ;
    int T ;
    cin>> T ;
    while(T--)
      {
        vb isprime(MX+10, true), taken(MX+10, false) ;
        isprime[1]=false ;
        DSU<lli, MX+10> p ;
        lli n, x, tot=0, cnt[MX+10] ;
        vlli a ;
        memset(cnt, 0, sizeof cnt) ;
        cin>> n ;
        for(int i=1 ; i<=n ; i++) cin>> x, a.pb(x), cnt[x]++ ;
        for(int i=2 ; i<=MX ; i++)
          if(isprime[i])
            {
              vi temp ;
              if(cnt[i]) temp.pb(i) ;
              for(int j=2*i ; j<=MX ; j+=i)
                if(cnt[j])
                  {
                    temp.pb(j) ;
                    isprime[j]=false ;
                  }
              for(int j=1 ; j<temp.size() ; j++) if(!p.same(temp[j], temp[j-1])) p.unionset(temp[j], temp[j-1]) ;
            }
          for(auto i:a) if(i!=1 && !taken[p.find(i)]) tot++, taken[p.find(i)]=true ;
          tot+=cnt[1] ;
          cout<< (fast_exp(2, tot)-2+mod)%mod << endl ;
      }
  }