#include <iostream>
#include<bits/stdc++.h>
using namespace std;
static const int MAXA = 1000000;
static const int MOD = 1000000007;
// fast exponentiation
long long modexp(long long b, long long e){
long long r=1;
while(e){
if(e&1) r = (r*b)%MOD;
b=(b*b)%MOD;
e>>=1;
}
return r;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<int> freq(MAXA+1,0);
for(int i=0;i<n;i++){
int a;
cin>>a;
freq[a]++;
}
// 1) Compute C[i] = how many a_j divisible by i
vector<int> C(MAXA+1,0);
for(int i=1;i<=MAXA;i++){
for(int j=i;j<=MAXA;j+=i)
C[i] += freq[j];
}
// 2) Compute S[i] = i * f(C[i]) = i * (C[i] * 2^(C[i]-1))
vector<int> S(MAXA+1,0);
for(int i=2;i<=MAXA;i++){
int c = C[i];
if(c==0) continue;
// f(c) = c * 2^(c-1) % MOD
long long fc = ( (long long)c * modexp(2, c-1) ) % MOD;
S[i] = (long long)i * fc % MOD;
}
// 3) Inclusion–exclusion downward to get A[i]
vector<int> A(MAXA+1,0);
long long answer = 0;
for(int i=MAXA; i>=2; --i){
long long ai = S[i];
// subtract off multiples
for(int j = 2*i; j <= MAXA; j += i){
ai = (ai - A[j] + MOD) % MOD;
}
A[i] = ai;
answer = (answer + ai) % MOD;
}
cout << answer << "\n";
return 0;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0YXRpYyBjb25zdCBpbnQgTUFYQSA9IDEwMDAwMDA7CnN0YXRpYyBjb25zdCBpbnQgTU9EICA9IDEwMDAwMDAwMDc7CgovLyBmYXN0IGV4cG9uZW50aWF0aW9uCmxvbmcgbG9uZyBtb2RleHAobG9uZyBsb25nIGIsIGxvbmcgbG9uZyBlKXsKICAgIGxvbmcgbG9uZyByPTE7CiAgICB3aGlsZShlKXsKICAgICAgICBpZihlJjEpIHIgPSAocipiKSVNT0Q7CiAgICAgICAgYj0oYipiKSVNT0Q7CiAgICAgICAgZT4+PTE7CiAgICB9CiAgICByZXR1cm4gcjsKfQoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IG47IAogICAgY2luID4+IG47CiAgICB2ZWN0b3I8aW50PiBmcmVxKE1BWEErMSwwKTsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgIGludCBhOyAKICAgICAgICBjaW4+PmE7CiAgICAgICAgZnJlcVthXSsrOwogICAgfQoKICAgIC8vIDEpIENvbXB1dGUgQ1tpXSA9IGhvdyBtYW55IGFfaiBkaXZpc2libGUgYnkgaQogICAgdmVjdG9yPGludD4gQyhNQVhBKzEsMCk7CiAgICBmb3IoaW50IGk9MTtpPD1NQVhBO2krKyl7CiAgICAgICAgZm9yKGludCBqPWk7ajw9TUFYQTtqKz1pKQogICAgICAgICAgICBDW2ldICs9IGZyZXFbal07CiAgICB9CgogICAgLy8gMikgQ29tcHV0ZSBTW2ldID0gaSAqIGYoQ1tpXSkgPSBpICogKENbaV0gKiAyXihDW2ldLTEpKQogICAgdmVjdG9yPGludD4gUyhNQVhBKzEsMCk7CiAgICBmb3IoaW50IGk9MjtpPD1NQVhBO2krKyl7CiAgICAgICAgaW50IGMgPSBDW2ldOwogICAgICAgIGlmKGM9PTApIGNvbnRpbnVlOwogICAgICAgIC8vIGYoYykgPSBjICogMl4oYy0xKSAlIE1PRAogICAgICAgIGxvbmcgbG9uZyBmYyA9ICggKGxvbmcgbG9uZyljICogbW9kZXhwKDIsIGMtMSkgKSAlIE1PRDsKICAgICAgICBTW2ldID0gKGxvbmcgbG9uZylpICogZmMgJSBNT0Q7CiAgICB9CgogICAgLy8gMykgSW5jbHVzaW9u4oCTZXhjbHVzaW9uIGRvd253YXJkIHRvIGdldCBBW2ldCiAgICB2ZWN0b3I8aW50PiBBKE1BWEErMSwwKTsKICAgIGxvbmcgbG9uZyBhbnN3ZXIgPSAwOwogICAgZm9yKGludCBpPU1BWEE7IGk+PTI7IC0taSl7CiAgICAgICAgbG9uZyBsb25nIGFpID0gU1tpXTsKICAgICAgICAvLyBzdWJ0cmFjdCBvZmYgbXVsdGlwbGVzCiAgICAgICAgZm9yKGludCBqID0gMippOyBqIDw9IE1BWEE7IGogKz0gaSl7CiAgICAgICAgICAgIGFpID0gKGFpIC0gQVtqXSArIE1PRCkgJSBNT0Q7CiAgICAgICAgfQogICAgICAgIEFbaV0gPSBhaTsKICAgICAgICBhbnN3ZXIgPSAoYW5zd2VyICsgYWkpICUgTU9EOwogICAgfQoKICAgIGNvdXQgPDwgYW5zd2VyIDw8ICJcbiI7CiAgICByZXR1cm4gMDsKfQo=