#include<bits/stdc++.h>
#define MOD 1000000007
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define pii pair < int , int >
#define vi vector < int >
#define vpi vector < pair < int , int > >
using namespace std ;
int a[100002] ;
int s[1000002] , parent[1000002] , done[1000002] , mark[1000002] ;
long long expo ( long long a , long long b ) {
    long long ret = 1 ;
    while ( b ) {
        if ( b&1 ) ret = (ret*a)%MOD ;
        a = (a*a)%MOD ;
        b /= 2 ;
    }
    return ret ;
}
void sieve() {
    long long i , j ;
    for ( i = 2 ; i <= 1000000 ; i++ ) {
        if ( s[i] == 0 ) {
            s[i] = i ;
            for ( j = i*i ; j <= 1000000 ; j += i )
                if ( s[j] == 0 ) s[j] = i ;
        }
    }
}
void make_set ( ) {
    for ( int i = 0 ; i <= 1000000 ; i++ ) { parent[i] = i ; mark[i] = 0 ;}
}
int find_parent ( int x ) {
    if ( x == parent[x] ) return x ;
    return parent[x] = find_parent ( parent[x] ) ;
}
void union1 ( int x , int y ) {
    int px = find_parent ( x ) ;
    int py = find_parent ( y ) ;
    if ( px != py ) {
        parent[py] = px ;
    }
}
void factorize ( int x ) {
    vi cnt ;
    while ( x > 1 ) {
        if ( !done[s[x]] ) cnt.pb ( s[x] ) ;
        done[s[x]] = 1 ;
        mark[s[x]] = 1 ;
        x /= s[x] ;
    }
    int nn = cnt.size() ;
    for ( int i = 0 ; i < nn ; i++ ) {
        for ( int j = 0 ; j < nn ; j++ ) {
            union1 ( cnt[i] , cnt[j] ) ;
        }
    }
    for ( int i = 0 ; i < nn ; i++ )
        done[cnt[i]] = 0 ;

}
int main () {
    sieve() ;
    int t ; scanf ( "%d" , &t ) ;
    while ( t-- ) {
        int n ; scanf ( "%d" , &n ) ;
        make_set ( ) ;
        int cnt = 0 ;
        for ( int i = 1 ; i <= n ; i++ ) {
            scanf ( "%d" , &a[i] ) ;
            if ( a[i] == 1 ) { cnt++ ; continue ; }
            factorize ( a[i] ) ;
        }
        set < int > st ;
        for ( int i = 1 ; i <= 1000000 ; i++ ) {
            if ( !mark[i] ) continue ;
            int x = find_parent ( i ) ;
            st.insert ( x ) ;
        }
        long long ans = 0 ;
        cnt += st.size() ;
        if ( cnt > 1 ) {
            ans = expo ( 2 , cnt ) ;
            ans = (ans-2+MOD)%MOD ;
        }
        printf ( "%lld\n" , ans ) ;
    }
    return 0 ;
}