#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <cmath>
#include <ctime>
using namespace std;

#ifdef LOCAL
	#define eprintf(...) fprintf(stderr, __VA_ARGS__)
#else
	#define eprintf(...) 42
#endif

typedef long long ll;
const int N = (int)1e5 + 10;
const ll INF = (ll)1e18;
const int LOG = 17;
ll MaxValue, Border;
ll a[N];
ll sparse[LOG][N];
int h[N];
int n;

ll gcd(ll x, ll y)
{
	return y == 0 ? x : gcd(y, x % y);
}

ll cheatGcd(ll x, ll y)
{
	if (y <= Border)
		return 1;
	return y == 0 ? x : gcd(y, x % y);
}

void read()
{
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
		scanf("%lld", &a[i]);
}

void calcSparse()
{
	for (int i = 0; i < LOG; i++)
	{
		for (int s = 0; s <= n - (1 << i); s++)
		{
			if (i == 0)
				sparse[i][s] = a[s];
			else
				sparse[i][s] = gcd(sparse[i - 1][s], sparse[i - 1][s + (1 << (i - 1))]);
		}
	}
}

ll getCheatGcd(int l, int r)
{
	int t = h[r - l + 1];
	return cheatGcd(sparse[t][l], sparse[t][r - (1 << t) + 1]);
}

void calcH()
{
	h[1] = 0;
	for (int i = 2; i < N; i++)
		h[i] = h[i / 2] + 1;
}

void solve()
{
	MaxValue = -INF;
	for (int i = 0; i < n; i++)
		MaxValue = max(MaxValue, a[i]);
	Border = MaxValue / (n + 1);

	calcSparse();
	calcH();
	ll ans = MaxValue;
	for (int i = 0; i < n; i++)
	{
		int t = i;
		while (t < n)
		{
			ll curGcd = getCheatGcd(i, t);	
			int l = t, r = n;
			while (r - l > 1)
			{
				int mid = (l + r) / 2;
				if (getCheatGcd(i, mid) != curGcd)
					r = mid;
				else
					l = mid;
			}
			ans = max(ans, curGcd * (r - i));
			if (curGcd == 1)
				break;
			t = r;
		}
	}
	printf("%lld\n", ans);
}

int main()
{
#ifdef LOCAL
	freopen ("input.txt", "r", stdin);
	freopen ("output.txt", "w", stdout);
#endif
	int T;
	scanf("%d", &T);
	for (int i = 0; i < T; i++)
	{
		read();
		solve();
	}
	return 0;
}