#include using namespace std; int main() { constexpr int64_t mod = 998244353; int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a.at(i); } reverse(a.begin(), a.end()); vector b = a; sort(b.begin(), b.end()); b.erase(unique(b.begin(), b.end()), b.end()); vector c(n); for (int i = 0; i < n; i++) { c.at(i) = lower_bound(b.begin(), b.end(), a.at(i)) - b.begin(); } vector s(n + 1), t(n + 1); vector s0(n), t0(n); for (int i = 0; i < n; i++) { int x = c.at(i); while (x) { (s0.at(i) += s.at(x)) %= mod; t0.at(i) += t.at(x); x -= x & -x; } x = c.at(i) + 1; while (x <= n) { (s.at(x) += b.at(c.at(i))) %= mod; t.at(x)++; x += x & -x; } } for (int i = 0; i <= n; i++) { s.at(i) = 0; t.at(i) = 0; } reverse(c.begin(), c.end()); vector s1(n), t1(n); int64_t ssum = 0; for (int i = 0; i < n; i++) { int x = c.at(i) + 1; s1.at(i) = ssum; t1.at(i) = i; (ssum += b.at(c.at(i))) %= mod; while (x) { (s1.at(i) -= s.at(x)) %= mod; t1.at(i) -= t.at(x); x -= x & -x; } x = c.at(i) + 1; while (x <= n) { (s.at(x) += b.at(c.at(i))) %= mod; t.at(x)++; x += x & -x; } } int64_t ans = 0; for (int i = 0; i < n; i++) { int p = n - 1 - i; ans += a.at(i) * t0.at(i) % mod * t1.at(p) % mod; ans += s0.at(i) * t1.at(p) % mod; ans += t0.at(i) * s1.at(p) % mod; ans %= mod; } cout << (ans + mod) % mod << endl; }