#include <bits/stdc++.h> #define pb push_back #define mod 1000000007 using namespace std; typedef long long int ll; int t, n, prime[1100000], arr[110000], done[1100000], ans = 0, dsu[1100000], rank1[1100000]; vector< vector<int> > divs(1100000); vector<int> pres; void init() { divs[1].pb(1); for (ll i = 2; i <= 1e6; i++) { if (prime[i] != 0) continue; for (ll j = i; j <= 1e6; j += i) { divs[j].pb(i); prime[j] = 1; } } } ll pow1(ll a, ll b) { if (b == 0) return 1ll; else if (b == 1) return a; else { ll x = pow1(a, b/2); x *= x; x %= mod; if (b%2) { x *= a; x %= mod; } return x; } } int root(int ind) { if (dsu[ind] == ind) return ind; dsu[ind] = root(dsu[ind]); return dsu[ind]; } void join(int a, int b) { int t1 = root(a), t2 = root(b); if (t1 == t2) return; if (rank1[t1] >= rank1[t2]) { dsu[t2] = t1; rank1[t1] = max(rank1[t1], 1+rank1[t2]); } else { dsu[t1] = t2; rank1[t2] = max(rank1[t2], 1+rank1[t1]); } } int main() { init(); cin>>t; while (t--) { cin>>n; memset(done, 0, sizeof(done)); for (int i = 1; i <= 1e6; i++) { dsu[i] = i; rank1[i] = 1; } ans = 0; ll ones = 0; for (int i = 1; i <= n; i++) { cin>>arr[i]; done[divs[arr[i]][0]] = 1; if (arr[i] == 1) ones++; for (int j = 1; j < divs[arr[i]].size(); j++) { int num = divs[arr[i]][j]; int num1 = divs[arr[i]][j-1]; done[num] = 1; join(num, num1); } } for (int i = 2; i <= 1e6; i++) if (dsu[i] == i and done[i]) ans++; ans += ones; ll ans1 = pow1(2, ans); ans1 -= 2; if (ans1 < 0) ans1 += mod; cout<<ans1<<endl; } }