// Shaazzz
#include<bits/stdc++.h>
using namespace std;
const int N = 1000006, Mod = 1e9 + 7;
int n, tot, F[N], dp[N];
inline void Add(int i)
{
    for (; i < N; i += i & -i)
        F[i] ++;
}
inline int Get(int i)
{
    int ret = 0;
    for (; i; i -= i & -i)
        ret += F[i];
    return (ret);
}
int main()
{
    scanf("%d", &n);
    dp[1] = 0;
    for (int i = 2; i < N; i++)
        dp[i] = (1ll * dp[i - 1] * i + 1ll * (i - 1) * (i + 1) / 2) % Mod;
    for (int i = 1; i <= n; i++)
    {
        int a, c;
        scanf("%d", &a);
        c = a - 1 - Get(a);
        Add(a);
        tot = (tot + 1ll * c * (dp[n - i] + (n - i + 2) / 2)) % Mod;
    }
    return !printf("%d", tot);
}
