#include <bits/stdc++.h>
using namespace std;
const int M = 1e9 + 7;
struct BIT {
  long long bit[500005];
  void add(int i, int v) {
    while (i < 500005) {
      bit[i] += v;
      bit[i] %= M;
      i += i & -i;
    }
  }
  long long qry(int i) {
    long long ret = 0;
    while (i) {
      ret += bit[i];
      ret %= M;
      i -= i & -i;
    }
    return ret;
  }
  long long qry(int i, int j) { return (qry(j) - qry(i - 1) + M) % M; }
} b1, b2;
int a[500005];
pair<int, int> b[500005];
int main() {
  std::ios::sync_with_stdio(0);
  std::cin.tie(0);
  ;
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    b[i] = {a[i], i};
  }
  sort(b + 1, b + n + 1);
  long long ans = 0;
  for (int i = 1; i <= n; i++) {
    long long j = b[i].second;
    long long tmp = j * (n + 1 - j) % M;
    tmp += b1.qry(j) * (n + 1 - j) % M;
    tmp += b2.qry(j, n) * j % M;
    ans += tmp * b[i].first % M;
    b1.add(j, j);
    b2.add(j, n + 1 - j);
  }
  cout << ans % M << endl;
}
