#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pie 2*(acos(0.0))
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define pb push_back
#define endl "\n"
#define lcm(a,b) (a*b)/(__gcd<ll>(a,b))
#define mod 1000000007
#define srt(v) sort(v.begin(),v.end())
#define rsrt(v) sort(v.rbegin(),v.rend())
#define ALLAHU_AKBAR ios::sync_with_stdio(false); cin.tie(nullptr);
//typedef tree<ll, null_type, greater<ll>,rb_tree_tag, tree_order_statistics_node_update> ordered_set;
void sir()
{
ll n; cin>>n;
vector<ll>v(n+1);
ll ans = 0; ll s1 = 0;
for(ll i=1; i<=n; i++)
{
cin>>v[i];
ans = __gcd(ans,v[i]);
s1 += v[i]; //size n
}
if(n==1)
{
cout<<ans<<endl;
return;
}
s1%=mod;
ans *= s1;
ans = ans%mod;
for(ll i=2; i<n; i++)
{
vector<vector<ll>>grp;
for(ll musk=0; musk<(1<<n); musk++)
{
ll chk = __builtin_popcount(musk);
if(chk==i)
{
vector<ll>temp;
//bitset<n>A(musk);
for(ll c=0; c<n; c++)
{
if(musk&(1<<c))
{
temp.pb(v[c+1]);
}
}
grp.pb(temp);
}
}
//debug
// if(i==2)
// {
// for(ll x = 0; x<grp.size(); x++)
// {
// for(auto e:grp[x]) cout<<e<<" "; cout<<endl;
// }
//
// }
ll sum = 0;
for(ll x=0; x<grp.size(); x++)
{
vector<ll>tem = grp[x];
ll stem = 0;
for(ll a=0; a<tem.size(); a++)
{
stem = __gcd(stem, tem[a]);
}
sum += stem;
sum = sum%mod;
}
ans *= sum;
ans = ans%mod;
}
cout<<ans<<endl;
}
int main() {
ALLAHU_AKBAR
ll t = 1;
cin>>t;
while(t--)
{
sir();
}
return 0;
}