#include <iostream>
using namespace std;
const int MOD = 998244353;
const int a_max = 1000001;
int count[a_max];
long long T_g[a_max];
int main() {
int N;
std::cin >> N;
for(int i = 0; i < N; ++i) {
int x;
std:: cin >> x;
count[x]++;
}
for(int g = 1; g < a_max; ++g) {
long long prefix_sum = 0;
// Now loop through all the multiples of g
for(long long gmult = g; gmult < a_max; gmult += g) {
// Multiply current element(s) with the sum of the previously seen
T_g[g] += prefix_sum * count[gmult] * gmult;
// Don't forget the pairwise sums in the current set
T_g[g] += (gmult * gmult * count[gmult] * (count[gmult] - 1))/2;
// Update the prefix sum
prefix_sum += count[gmult] * gmult;
}
}
long long answer = 0;
for(int g = a_max - 1; g > 0; --g) {
for(int gmult = 2 * g; gmult < a_max; gmult += g) {
T_g[g] -= T_g[gmult];
}
answer += T_g[g] / g;
}
std::cout << answer % MOD << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1PRCA9IDk5ODI0NDM1MzsKCmNvbnN0IGludCBhX21heCA9IDEwMDAwMDE7CmludCBjb3VudFthX21heF07CmxvbmcgbG9uZyBUX2dbYV9tYXhdOwoKaW50IG1haW4oKSB7CiAgaW50IE47CiAgc3RkOjpjaW4gPj4gTjsKICAKICBmb3IoaW50IGkgPSAwOyBpIDwgTjsgKytpKSB7CiAgCWludCB4OwogIAlzdGQ6OiBjaW4gPj4gIHg7CiAgCWNvdW50W3hdKys7CiAgfQogIAogIGZvcihpbnQgZyA9IDE7IGcgPCBhX21heDsgKytnKSB7CiAgICBsb25nIGxvbmcgcHJlZml4X3N1bSA9IDA7CiAgCiAgICAvLyBOb3cgbG9vcCB0aHJvdWdoIGFsbCB0aGUgbXVsdGlwbGVzIG9mIGcKICAgIGZvcihsb25nIGxvbmcgZ211bHQgPSBnOyBnbXVsdCA8IGFfbWF4OyBnbXVsdCArPSBnKSB7CiAgICAgIC8vIE11bHRpcGx5IGN1cnJlbnQgZWxlbWVudChzKSB3aXRoIHRoZSBzdW0gb2YgdGhlIHByZXZpb3VzbHkgc2VlbgogICAgICBUX2dbZ10gKz0gcHJlZml4X3N1bSAqIGNvdW50W2dtdWx0XSAqIGdtdWx0OwoKICAgICAgLy8gRG9uJ3QgZm9yZ2V0IHRoZSBwYWlyd2lzZSBzdW1zIGluIHRoZSBjdXJyZW50IHNldAogICAgICBUX2dbZ10gKz0gKGdtdWx0ICogZ211bHQgKiBjb3VudFtnbXVsdF0gKiAoY291bnRbZ211bHRdIC0gMSkpLzI7CgogICAgICAvLyBVcGRhdGUgdGhlIHByZWZpeCBzdW0KICAgICAgcHJlZml4X3N1bSArPSBjb3VudFtnbXVsdF0gKiBnbXVsdDsKICAgIH0gCiAgfQoKICBsb25nIGxvbmcgYW5zd2VyID0gMDsKICBmb3IoaW50IGcgID0gYV9tYXggLSAxOyBnID4gMDsgLS1nKSB7CiAgICBmb3IoaW50IGdtdWx0ID0gMiAqIGc7IGdtdWx0IDwgYV9tYXg7IGdtdWx0ICs9IGcpIHsKICAgICAgVF9nW2ddIC09IFRfZ1tnbXVsdF07CiAgICB9CiAgICBhbnN3ZXIgKz0gVF9nW2ddIC8gZzsKICB9CgogIHN0ZDo6Y291dCA8PCBhbnN3ZXIgJSBNT0QgPDwgIlxuIjsKICByZXR1cm4gMDsKfQ==