#include <bits/stdc++.h>
using namespace std;
int const N = 5e5 + 10, P = 1e9 + 7;
vector<pair<int, int> > v;
long long ans, seg[N << 2][2];
int n, a[N];
void read_input() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    v.push_back(make_pair(a[i], i));
  }
}
void add(bool k, int p, int id = 1, int st = 1, int en = N) {
  if (en - st == 1) {
    seg[id][k] = (k ? n - p + 1 : p);
    return;
  }
  int mid = (en + st) >> 1;
  (mid > p ? add(k, p, id << 1, st, mid) : add(k, p, id << 1 | 1, mid, en));
  seg[id][k] = (seg[id << 1][k] + seg[id << 1 | 1][k]) % P;
}
long long get(bool k, int L, int R, int id = 1, int st = 1, int en = N) {
  if (en <= L || st >= R) return 0;
  if (L <= st && en <= R) return seg[id][k];
  int mid = (st + en) >> 1;
  return (get(k, L, R, id << 1, st, mid) + get(k, L, R, id << 1 | 1, mid, en)) %
         P;
}
long long mul(long long a, long long b, long long c) {
  return (((a * b) % P) * c) % P;
}
void solve() {
  sort(v.begin(), v.end());
  for (pair<int, int> u : v) {
    add(0, u.second);
    ans = (ans + mul(get(0, 1, u.second + 1), (n - u.second + 1), u.first)) % P;
    add(1, u.second);
    ans = (ans + mul(get(1, u.second + 1, n + 1), u.second, u.first)) % P;
  }
  cout << ans;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  read_input(), solve();
  return 0;
}
