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