#include <bits/stdc++.h>
#pragma GCC optimize ("O2")
#pragma GCC optimize ("unroll-loops")
//#pragma GCC optimize("no-stack-protector,fast-math")

using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<pii, int> piii;
typedef pair<ll, ll> pll;
#define debug(x) cerr<<#x<<'='<<(x)<<endl;
#define debugp(x) cerr<<#x<<"= {"<<(x.first)<<", "<<(x.second)<<"}"<<endl;
#define debug2(x, y) cerr<<"{"<<#x<<", "<<#y<<"} = {"<<(x)<<", "<<(y)<<"}"<<endl;
#define debugv(v) {cerr<<#v<<" : ";for (auto x:v) cerr<<x<<' ';cerr<<endl;}
#define all(x) x.begin(), x.end()
#define pb push_back
#define kill(x) return cout<<x<<'\n', 0;

const ld eps=1e-7;
const int inf=1000000010;
const ll INF=10000000000000010LL;
const int mod = 1000000007;
const int MAXN = 200010, LOG=20;

struct Fenwick{
	ll fen[MAXN];
	Fenwick(){
		reset();
	}
	void reset(){ memset(fen, 0, sizeof(fen));}
	void add(int pos, ll val){
		for (; pos<MAXN; pos+=pos&-pos) fen[pos]=(fen[pos] + val)%mod;
	}
	ll get(int pos){
		ll res=0;
		for (; pos; pos-=pos&-pos) res=(res + fen[pos])%mod;
		return res;
	}
} fen;

ll n, m, k, u, v, x, y, t, a, b, ans;
ll A[MAXN], B[MAXN], C[MAXN];
int prv[MAXN];

ll powmod(ll a, ll b){
	ll res=1;
	for (; b; b>>=1, a=a*a%mod) if (b&1) res=res*a%mod;
	return res;
}

int main(){
	ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	cin>>n;
	for (int i=1; i<=n; i++) cin>>A[i], B[A[i]]++;
	for (int i=n-1; i; i--) B[i]+=B[i+1]-1;
	for (int i=1; i<=n; i++) if (B[i]<=0) kill(0)
	//debug("shit")
	C[0]=1;
	for (int i=1; i<=n; i++){
		prv[i]=prv[i-1];
		C[i]=C[i-1];
		if (B[i]==1) prv[i]=i;
		else C[i]=C[i]*(B[i]-1)%mod*powmod(B[i], mod-2)%mod;
	}
	
	for (int i=1; i<=n; i++){
		ans+=(fen.get(A[i])-fen.get(prv[A[i]]-1))*C[A[i]]%mod;
		fen.add(A[i], powmod(C[A[i]], mod-2));
	}
	fen.reset();
	
	for (int i=n; i; i--){
		ans-=(fen.get(A[i]-1)-fen.get(prv[A[i]]-1))*C[A[i]]%mod;
		fen.add(A[i], powmod(C[A[i]], mod-2));
	}
	
	ans%=mod;
	ans=ans*(mod+1)/2%mod;
	
	fen.reset();
	for (int i=n; i; i--){
		ans+=fen.get(A[i]-1);
		fen.add(A[i], +1);
	}
	
	for (int i=1; i<=n; i++) ans=ans*B[i]%mod;
	if (ans<0) ans+=mod;
	cout<<ans<<'\n';
	
	return 0;
}
