#include <bits/stdc++.h>
using namespace std;
struct piar {
  int a, b;
  bool operator<(const piar& x) const { return a < x.a; }
} e[500010];
long long ans = 0;
long long c[2][500010];
int a[500010];
void add(int t, int x, int y) {
  for (; x < 500010; x += (x & (-x))) {
    c[t][x] += y;
    if (c[t][x] >= 1000000007) c[t][x] -= 1000000007;
  }
}
long long qry(int t, int x) {
  long long res = 0;
  for (; x; x -= (x & (-x))) {
    res += c[t][x];
    if (res >= 1000000007) res -= 1000000007;
  }
  return res;
}
int main() {
  int n, i;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%d", &a[i]), e[i] = {a[i], i};
  sort(e + 1, e + n + 1);
  for (i = 1; i <= n; i++) {
    int w = e[i].b, h = n - w + 1;
    add(0, h, h);
    add(1, h, w);
    long long k1 = qry(0, h), k2 = qry(1, n) - qry(1, h - 1) + 1000000007;
    k2 %= 1000000007;
    ans += ((k1 * w + k2 * h - 1ll * w * h + 1000000007) % 1000000007) *
           e[i].a % 1000000007;
    ans %= 1000000007;
  }
  cout << ans;
}
