#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
#pragma GCC optimize("O3,unroll-loops")
#ifdef LOCAL
#include "debug.h"
#else
#define dbg(...)
#endif
#define endl '\n'
#define int int64_t
const long long mod = 1000000007, MaxN = 200005, INF = 1e10;
const int MAX = 1e5 + 5;
template <typename T>
struct BIT
{
int sz;
vector<T> tree;
BIT() {};
BIT(int N)
{
sz = N + 1;
tree.resize(sz, -INF);
}
int lsb(int x)
{
return (x & -x);
}
void update(int idx, T x)
{
for (; idx < sz; idx += lsb(idx))
tree[idx] = max(x, tree[idx]);
}
T get(int idx)
{
T Max = -INF;
for (; idx; idx -= lsb(idx)){
Max = max(Max, tree[idx]);
}
return Max;
}
};
vector<BIT<int>>all(MAX);
vector<vector<int>>fact(MAX);
void solve()
{
int N;
cin >> N;
vector<int> a(N + 1);
for (int i = 1; i <= N; i++)
{
cin >> a[i];
}
vector<int>dp(N + 1);
for (int i = 1; i <= MAX; i++)
{
//bit[x][i] = max dp value where a[j] is divisble by x and a[j] <= i*x
all[i] = BIT<int>(MAX / i + 3);
}
for (int i = 1; i <= N; i++)
{
for (auto &x : fact[a[i]])
{
//index of a[i] in the compressed form
int idx = a[i] / x + 1;
int y = all[x].get(idx);
dp[i] = max(dp[i], y + x);
}
for(auto x : fact[a[i]]){
int idx = a[i] / x + 1;
//update the dp values with the new dp[i]
all[x].update(idx, dp[i]);
}
}
cout << *max_element(dp.begin(), dp.end()) << endl;
}
signed main()
{
// freopen("mootube.in","r",stdin);
// freopen("mootube.out","w",stdout);
#ifdef LOCAL
FileRedirect("test");
#endif
ios::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
//precompute factors
for(int i = 1;i < MAX;i++){
for(int j = i;j < MAX;j += i){
fact[j].push_back(i);
}
}
int Tc = 1;
cin >> Tc;
for (int T = 1; T <= Tc; T++)
solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiNwcmFnbWEgR0NDIG9wdGltaXplKCJPMyx1bnJvbGwtbG9vcHMiKQojaWZkZWYgTE9DQUwKI2luY2x1ZGUgImRlYnVnLmgiCiNlbHNlCiNkZWZpbmUgZGJnKC4uLikKI2VuZGlmCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgaW50IGludDY0X3QKY29uc3QgbG9uZyBsb25nIG1vZCA9IDEwMDAwMDAwMDcsIE1heE4gPSAyMDAwMDUsIElORiA9IDFlMTA7CmNvbnN0IGludCBNQVggPSAxZTUgKyA1Owp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IEJJVAp7CglpbnQgc3o7Cgl2ZWN0b3I8VD4gdHJlZTsKCUJJVCgpIHt9OwoJQklUKGludCBOKQoJewoJCXN6ID0gTiArIDE7CgkJdHJlZS5yZXNpemUoc3osIC1JTkYpOwoJfQoJaW50IGxzYihpbnQgeCkKCXsKCQlyZXR1cm4gKHggJiAteCk7Cgl9Cgl2b2lkIHVwZGF0ZShpbnQgaWR4LCBUIHgpCgl7CgkJZm9yICg7IGlkeCA8IHN6OyBpZHggKz0gbHNiKGlkeCkpCgkJCXRyZWVbaWR4XSA9IG1heCh4LCB0cmVlW2lkeF0pOwoJfQoJVCBnZXQoaW50IGlkeCkKCXsKCQlUIE1heCA9IC1JTkY7CgkJZm9yICg7IGlkeDsgaWR4IC09IGxzYihpZHgpKXsKCQkJTWF4ID0gbWF4KE1heCwgdHJlZVtpZHhdKTsKCQl9CgkJcmV0dXJuIE1heDsKCX0KCQp9Owp2ZWN0b3I8QklUPGludD4+YWxsKE1BWCk7CnZlY3Rvcjx2ZWN0b3I8aW50Pj5mYWN0KE1BWCk7CnZvaWQgc29sdmUoKQp7CglpbnQgTjsKCWNpbiA+PiBOOwoJdmVjdG9yPGludD4gYShOICsgMSk7Cglmb3IgKGludCBpID0gMTsgaSA8PSBOOyBpKyspCgl7CgkJY2luID4+IGFbaV07CQkKCX0KCXZlY3RvcjxpbnQ+ZHAoTiArIDEpOwoJZm9yIChpbnQgaSA9IDE7IGkgPD0gTUFYOyBpKyspCgl7CgkJLy9iaXRbeF1baV0gPSBtYXggZHAgdmFsdWUgd2hlcmUgYVtqXSBpcyBkaXZpc2JsZSBieSB4IGFuZCBhW2pdIDw9IGkqeAoJCWFsbFtpXSA9IEJJVDxpbnQ+KE1BWCAvIGkgKyAzKTsKCX0KCWZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykKCXsKCQlmb3IgKGF1dG8gJnggOiBmYWN0W2FbaV1dKQoJCXsKCQkJLy9pbmRleCBvZiBhW2ldIGluIHRoZSBjb21wcmVzc2VkIGZvcm0KCQkJaW50IGlkeCA9IGFbaV0gLyB4ICsgMTsKCQkJaW50IHkgPSBhbGxbeF0uZ2V0KGlkeCk7CgkJCWRwW2ldID0gbWF4KGRwW2ldLCB5ICsgeCk7CgkJfQoJCWZvcihhdXRvIHggOiBmYWN0W2FbaV1dKXsKCQkJaW50IGlkeCA9IGFbaV0gLyB4ICsgMTsKCQkJLy91cGRhdGUgdGhlIGRwIHZhbHVlcyB3aXRoIHRoZSBuZXcgZHBbaV0KCQkJYWxsW3hdLnVwZGF0ZShpZHgsIGRwW2ldKTsKCQl9Cgl9Cgljb3V0IDw8ICptYXhfZWxlbWVudChkcC5iZWdpbigpLCBkcC5lbmQoKSkgPDwgZW5kbDsKfQpzaWduZWQgbWFpbigpCnsKCS8vIGZyZW9wZW4oIm1vb3R1YmUuaW4iLCJyIixzdGRpbik7CgkvLyBmcmVvcGVuKCJtb290dWJlLm91dCIsInciLHN0ZG91dCk7CgkjaWZkZWYgTE9DQUwKCUZpbGVSZWRpcmVjdCgidGVzdCIpOwoJI2VuZGlmCglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWNpbi50aWUobnVsbHB0cik7Cgljb3V0LnRpZShudWxscHRyKTsKCS8vcHJlY29tcHV0ZSBmYWN0b3JzCglmb3IoaW50IGkgPSAxO2kgPCBNQVg7aSsrKXsKCQlmb3IoaW50IGogPSBpO2ogPCBNQVg7aiArPSBpKXsKCQkJZmFjdFtqXS5wdXNoX2JhY2soaSk7CgkJfQoJfQkKCWludCBUYyA9IDE7CgljaW4gPj4gVGM7Cglmb3IgKGludCBUID0gMTsgVCA8PSBUYzsgVCsrKQoJCXNvbHZlKCk7Cn0=