func_code_string: #include <bits/stdc++.h>   using namespace std;   long long gcd(long long n1, long long n2) {     if (!n1) return n2;     if (!n2) return n1;     if (n1 % n2 == 0) return n2;     return gcd(n2, n1 % n2);   }   long long powmod(long long base, long long exponent) {     base %= 1000000007;     long long ans = 1;     while (exponent) {       if (exponent & 1) ans = (ans * base) % 1000000007;       base = (base * base) % 1000000007;       exponent /= 2;     }     ans %= 1000000007;     return ans;   }   int arr[1000100 + 1];   int cnt[1000100 + 1];   int pw[1000100 + 1];   int dp[1000100 + 1];   int main() {     int n, i, j, k;     pw[0] = 1;     for (i = 1; i <= 1000100; i++) {       pw[i] = (2 * pw[i - 1]) % 1000000007;     }     scanf( %d , &n);     for (i = 1; i <= n; i++) {       scanf( %d , &arr[i]);       cnt[arr[i]]++;     }     for (i = 1; i <= 1000100; i++)       for (j = i; j <= 1000100; j += i) dp[i] += cnt[j];     for (i = 1; i <= 1000100; i++)       if (dp[i]) {         dp[i] = (1LL * dp[i] * pw[dp[i] - 1]) % 1000000007;       }     long long answer = 0;     for (i = 1000100; i >= 2; i--) {       for (j = 2 * i; j <= 1000100; j += i) {         dp[i] -= dp[j];         if (dp[i] < 0) dp[i] += 1000000007;       }       answer = (answer + 1LL * i * dp[i]) % 1000000007;     }     printf( %lld n , answer);     return 0;   }   