#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> ii;
typedef vector<ll> vi;
typedef vector<ii> vii;
typedef vector<vi> vvi;

#define x first
#define y second
#define pb push_back
#define eb emplace_back
#define rep(i,a,b) for(auto i = (a); i < (b); ++i)
#define REP(i,n) rep(i,0,n)
#define sz(v) ((int) (v).size())
#define rs resize
#define all(v) begin(v), end(v)

struct bi_graph {
    int n, m, s; vvi G; vi L, R, d;
    bi_graph(int _n, int _m) : n(_n), m(_m), s(0), G(n), L(n, -1), R(m, n), d(n+1) {}
    void add_edge(int a, int b) {
        G[a].pb(b);
    }
    bool bfs(){
        queue<int> q; d[n] = LLONG_MAX;
        REP(v,n) {
            if (L[v] < 0) d[v] = 0, q.push(v);
            else d[v] = LLONG_MAX;
        }
        while(!q.empty()){
            int v = q.front(); q.pop();
            if(d[v] >= d[n]) continue;
            for(int u : G[v]) if(d[R[u]] == LLONG_MAX)
                d[R[u]] = d[v] + 1, q.push(R[u]);
        }
        return d[n] != LLONG_MAX;
    }
    bool dfs(int v){
        if(v == n) return true;
        for(int u : G[v])
            if(d[R[u]] == d[v] + 1 && dfs(R[u])){
                R[u] = v; L[v] = u; return true;
            }
        d[v] = LLONG_MAX; return false;
    }
    int max_match(){
        while(bfs()) REP(i,n) s += L[i] < 0 && dfs(i);
        return s;
    }
};

ll n;
vi a;
bool test(ll m){
    //Bepaal de interessante
    vi over;
    for(ll i = 0; i < n; i++)
        if(a[i] * n > m)
            over.pb(a[i]);


    //Bepaal alle matches
    map<ll,ll> index;
    vvi buren = vvi(over.size());
    ll nu, r = 0;
    for(ll i = 0; i < over.size(); i++)
        for(ll j = 1; j <= over.size() && over[i] * j <= m; j++) {
            if (index.count(j * over[i]) == 0) {
                index.emplace(j * over[i], r);
                r++;
            }
            nu = index[j * over[i]];
            buren[i].pb(nu);
        }

    //Test het
    bi_graph g = bi_graph(over.size(),r);
    for(ll i = 0; i < over.size(); i++)
        for(ll j : buren[i])
            g.add_edge(i, j);
    return (g.max_match() == over.size());
}
void run(){
    cin >> n;
    a = vi(n);
    for(ll i = 0; i < n; i++)
        cin >> a[i];

    //Bepaal waar we gaan zoeken
    set<ll> gehad;
    vi rij;
    ll nu;
    for(ll i = 0; i < n; i++)
        for(ll j = 0; j <= n; j++){
            nu = a[i] * j;
            if(gehad.count(nu) == 0){
                gehad.emplace(nu);
                rij.pb(nu);
            }
        }
    sort(all(rij));

    //Doe de binary search
    ll l = -1, r = rij.size(), m;
    while(r - l > 1){
        m = (l+ r) / 2;
        if(test(rij[m]))
            r = m;
        else
            l = m;
    }
    cout << rij[r] << endl;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout << fixed << setprecision(20);
    ll t;
    for(cin >> t; t > 0; t--)
        run();
    return 0;
}