#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
#define fi first
#define se second
#define pp push_back
#define all(x) (x).begin(), (x).end()
#define Ones(n) __builtin_popcount(n)
#define endl '\n'
#define mem(arrr, xx) memset(arrr,xx,sizeof arrr)
//#define int long long
#define debug(x) cout << (#x) << " = " << x << endl
void Gamal() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#ifdef Clion
freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
#endif
}
int dx[] = {+0, +0, -1, +1, +1, +1, -1, -1};
int dy[] = {-1, +1, +0, +0, +1, -1, +1, -1};
const double EPS = 1e-9;
const ll OO = 0X3F3F3F3F3F3F3F3F;
const int N = 1e5 + 5, INF = INT_MAX, MOD = 1e9 + 7, LOG = 20;
vector<int> divs[N];
void build() {
for (int i = 1; i < N; ++i) {
for (int j = i; j < N; j += i) {
divs[j].push_back(i);
}
}
}
ll mul(const ll &a, const ll &b) {
return (a % MOD + MOD) * (b % MOD + MOD) % MOD;
}
ll add(const ll &a, const ll &b) {
return (a + b + 2 * MOD) % MOD;
}
ll pw(ll b, ll p) {
if (p < 0)return 0;
if (!p) return 1LL;
ll ret = pw(b, p >> 1LL);
ret = mul(ret, ret);
if (p & 1LL)
ret = mul(ret, b);
return ret;
}
ll dp[N], sum[N];
void solve() {
int n;
cin >> n;
mem(dp, 0);
mem(sum, 0);
ll ans = 0,tot = 0;
for (int i = 0; i < n; ++i) {
int x;
cin >> x;
tot += x;
for (auto d: divs[x]) {
dp[d] = add(dp[d], mul(x, sum[d]));
sum[d] = add(sum[d], x);
}
}
for (int i = N - 1; i >= 1; --i) {
for (int j = 2 * i; j < N; j += i) {
dp[i] = add(dp[i], -dp[j]);
}
ans = add(ans, mul(dp[i], pw(i, MOD - 2)));
}
ans = add(mul(2,ans),tot);
cout << ans << endl;
}
signed main() {
Gamal();
freopen("lcm.in","r",stdin);
build();
int t = 1;
cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwp0eXBlZGVmIHBhaXI8bGwsIGxsPiBwbGw7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcHAgcHVzaF9iYWNrCiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKI2RlZmluZSBPbmVzKG4pIF9fYnVpbHRpbl9wb3Bjb3VudChuKQojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIG1lbShhcnJyLCB4eCkgbWVtc2V0KGFycnIseHgsc2l6ZW9mIGFycnIpCi8vI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgZGVidWcoeCkgY291dCA8PCAoI3gpIDw8ICIgPSAiIDw8IHggPDwgZW5kbAoKdm9pZCBHYW1hbCgpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGNvdXQudGllKG51bGxwdHIpOwojaWZkZWYgQ2xpb24KICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pLCBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKfQoKaW50IGR4W10gPSB7KzAsICswLCAtMSwgKzEsICsxLCArMSwgLTEsIC0xfTsKaW50IGR5W10gPSB7LTEsICsxLCArMCwgKzAsICsxLCAtMSwgKzEsIC0xfTsKCmNvbnN0IGRvdWJsZSBFUFMgPSAxZS05Owpjb25zdCBsbCBPTyA9IDBYM0YzRjNGM0YzRjNGM0YzRjsKY29uc3QgaW50IE4gPSAxZTUgKyA1LCBJTkYgPSBJTlRfTUFYLCBNT0QgPSAxZTkgKyA3LCBMT0cgPSAyMDsKCnZlY3RvcjxpbnQ+IGRpdnNbTl07Cgp2b2lkIGJ1aWxkKCkgewogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBOOyArK2kpIHsKICAgICAgICBmb3IgKGludCBqID0gaTsgaiA8IE47IGogKz0gaSkgewogICAgICAgICAgICBkaXZzW2pdLnB1c2hfYmFjayhpKTsKICAgICAgICB9CiAgICB9Cn0KCmxsIG11bChjb25zdCBsbCAmYSwgY29uc3QgbGwgJmIpIHsKICAgIHJldHVybiAoYSAlIE1PRCArIE1PRCkgKiAoYiAlIE1PRCArIE1PRCkgJSBNT0Q7Cn0KCmxsIGFkZChjb25zdCBsbCAmYSwgY29uc3QgbGwgJmIpIHsKICAgIHJldHVybiAoYSArIGIgKyAyICogTU9EKSAlIE1PRDsKfQoKbGwgcHcobGwgYiwgbGwgcCkgewogICAgaWYgKHAgPCAwKXJldHVybiAwOwogICAgaWYgKCFwKSByZXR1cm4gMUxMOwogICAgbGwgcmV0ID0gcHcoYiwgcCA+PiAxTEwpOwogICAgcmV0ID0gbXVsKHJldCwgcmV0KTsKICAgIGlmIChwICYgMUxMKQogICAgICAgIHJldCA9IG11bChyZXQsIGIpOwogICAgcmV0dXJuIHJldDsKfQoKCmxsIGRwW05dLCBzdW1bTl07Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKICAgIG1lbShkcCwgMCk7CiAgICBtZW0oc3VtLCAwKTsKICAgIGxsIGFucyA9IDAsdG90ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgaW50IHg7CiAgICAgICAgY2luID4+IHg7CiAgICAgICAgdG90ICs9IHg7CiAgICAgICAgZm9yIChhdXRvIGQ6IGRpdnNbeF0pIHsKICAgICAgICAgICAgZHBbZF0gPSBhZGQoZHBbZF0sIG11bCh4LCBzdW1bZF0pKTsKICAgICAgICAgICAgc3VtW2RdID0gYWRkKHN1bVtkXSwgeCk7CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGkgPSBOIC0gMTsgaSA+PSAxOyAtLWkpIHsKICAgICAgICBmb3IgKGludCBqID0gMiAqIGk7IGogPCBOOyBqICs9IGkpIHsKICAgICAgICAgICAgZHBbaV0gPSBhZGQoZHBbaV0sIC1kcFtqXSk7CiAgICAgICAgfQogICAgICAgIGFucyA9IGFkZChhbnMsIG11bChkcFtpXSwgcHcoaSwgTU9EIC0gMikpKTsKICAgIH0KICAgIGFucyA9IGFkZChtdWwoMixhbnMpLHRvdCk7CiAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwp9CgoKc2lnbmVkIG1haW4oKSB7CiAgICBHYW1hbCgpOwogICAgZnJlb3BlbigibGNtLmluIiwiciIsc3RkaW4pOwogICAgYnVpbGQoKTsKICAgIGludCB0ID0gMTsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9Cn0=