/*
* BISMILLAHIR RAHMANIR RAHIM
* ==========================
*
* Submitted By: SAKLAN
* North East University Bangladesh
*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define ld long double
#define cinv(v) for(auto &i:v) cin >> i;
#define vi vector<int>
#define vii vector<ll>
#define MOD 1000000007
#define coutv(v) for(auto e:v) cout << e << ' ';
#define srt(v) sort(v.begin(),v.end())
#define rsrt(v) sort(v.rbegin(),v.rend())
#define yes cout<<"Yes\n"
#define no cout<<"No\n"
#define mem(a,b) memset(a, b, sizeof(a) )
#define sqr(a) ((a) * (a))
#define file() freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#define endl '\n'
#define saklan ios::sync_with_stdio(0); cin.tie(0);
ll gcd ( ll a, ll b ) { return __gcd ( a, b ); }
ll lcm ( ll a, ll b ) { return a * ( b / gcd ( a, b ) ); }
int compute(const vi& v, const vi& idx){
int g = v[idx[0]];
for(size_t i=1; i<idx.size(); i++){
g = __gcd(g, v[idx[i]]);
}
return g;
}
void solve(){
int t = 1;
cin >> t;
while(t--){
int n;cin>>n;
vi v(n);
cinv(v);
int sum = 0;
vi res;
if(n==1){
cout << v[0] << endl;
continue;
}
// int sum1 = accumulate(v.begin(),v.end(),0LL);
// for(int i = 0; i < n; i++){
// long long sumI = 0;
// for(int j = i+1; j < n; j++){
// sumI += gcd(v[i], v[j]);
// }
// res.push_back(sumI);
// }
//
//
// for(auto val : res) cout << val << " ";
// cout << endl;
vi sumG(n+1, 0);
for(int k=1; k<=n; k++){
vi idx(k);
for(int i=0; i<k; i++) idx[i] = i;
while(1){
int g = compute(v, idx);
sumG[k] += g;
int i = k-1;
while(i>=0 && idx[i] == n-k+i) i--;
if(i < 0) break;
idx[i]++;
for(int j=i+1;j<k;j++) idx[j] = idx[j-1]+1;
}
}
int ans = 1;
for(int k=1;k<=n;k++){
ans = (ans * (sumG[k] % MOD)) % MOD;
}
cout << ans << endl;
}
}
int32_t main() {
saklan
solve();
return 0;
}