#include<bits/stdc++.h>
using namespace std;
//using u128 = __uint128_t;
#define int long long
#define endl "\n"
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define nl cout<<"\n"
#define cnl clog<<"\n"
#define lin(n) int n;cin>>n;
#define vin vector<int>
#define pr pair<int, int>
#define pp pop_back()
#define pb push_back
#define em_pb emplace_back
#define all(x) x.begin(),x.end()
#define ppfr(v) v.erase(v.begin());
#define sum_all(v) accumulate(all(v), 0ll)
#define forn(i,n) for(int i = 0; i < n; i++)
#define Forn(i,n) for(int i = 1; i <= n; i++)
#define rforn(i,n) for(int i = n - 1; i >= 0; i--)
#define print(arr) for(auto x: arr)cout<<x<<" ";nl;
#define mprint(mp) for(auto a : mp)cout<<a.first<<" "<<a.second<<endl;
#define _log2(n) 31 - __builtin_clz(n)
#define pop_count(n) __builtin_popcount(n)
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define rng(x,y) uniform_int_distribution<int>(x,y)(rng)
#ifdef DEBUG
#include<algo/debug.h>
#else
# define clog if (0) cerr
# define NB 2500
# define db(...) ""
#endif
// const int M = 998244353;
const long long INF = 1e18;
const int M = 1e9 + 7;
const int N = 2e5 + 100;
int n, v[N];
struct mint{
int32_t x;
inline mint(int x = 0) : x(x % M){};
inline mint & operator = (int n){return x = n, *this;}
inline mint & operator += (mint a){return (x += a.x) >= M && (x -= M), *this;}
inline mint & operator -= (mint a){return (x -= a.x) < 0 && (x += M), *this;}
inline mint & operator *= (mint a){return x = (uint64_t) x * a.x % M, *this;}
inline mint & operator %= (mint a){return (x %= a.x), *this;}
inline mint & operator ++(int32_t){return (*this += 1), *this;}
inline mint & operator --(int32_t){return (*this -= 1), *this;}
inline mint & operator ++(){return (*this += 1), *this;}
inline mint & operator --(){return (*this -= 1), *this;}
inline mint & operator ^= (int p){
mint ans = 1, w = *this;
for(; p; p >>= 1, w *= w)if(p & 1)ans *= w;
return x = ans.x, *this;
};
inline mint & operator /= (mint a){return *this *= (a ^= (M - 2)); }
friend inline mint operator + (mint a, mint b){return a += b;}
friend inline mint operator - (mint a, mint b){return a -= b;}
friend inline mint operator * (mint a, mint b){return a *= b;}
friend inline mint operator / (mint a, mint b){return a /= b;}
friend inline mint operator % (mint a, mint b){return a %= b;}
friend inline mint operator ^ (mint a, mint b){return a ^= b.x;}
friend inline mint operator ^ (mint a, int b){return a ^= b;}
friend inline mint operator & (mint a, mint b){return a.x & b.x;}
friend inline mint operator | (mint a, mint b){return a.x | b.x;}
friend inline bool operator < (const mint &a, const mint &b){return a.x < b.x;}
friend inline bool operator > (const mint &a, const mint &b){return a.x > b.x;}
friend inline bool operator <= (const mint &a, const mint &b){return a.x <= b.x;}
friend inline bool operator >= (const mint &a, const mint &b){return a.x >= b.x;}
friend inline bool operator == (const mint &a, const mint &b){return a.x == b.x;}
friend inline bool operator != (const mint &a, const mint &b){return a.x != b.x;}
explicit operator bool() const { return x != 0; }
friend std::ostream& operator<<(std::ostream& os, mint const& a) {return os << a.x;}
friend std::istream& operator>>(std::istream &is, mint& a){
int y; is >> y; (y %= M) < 0 && (y += M);
return a.x = y, is;
}
};
mint ans = 1;
int mp[N];
void recur(int i, int g, int len = 0){
if(i > n){
// ans *= max(1ll, g);
mp[len] += g;
return;
}
recur(i + 1, g, len);
recur(i + 1, gcd(v[i], g), len + 1);
}
void _(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> v[i];
mp[i] = 0;
}
ans = 1;
recur(1, 0);
for(int i = 1; i <= n; i++){
if(mp[i])ans *= mp[i];
}
cout << ans << endl;
}
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int test = 1;
cin>>test;
for(int i = 1; i <= test; i++){
// cout << "Case " << i <<": ";
_();
}
return 0;
}