#include<bits/stdc++.h>
using namespace std;
const int maxn=4e5,mod=1e9+7;
int n,iv2,a[maxn],cnt[maxn],zero[maxn],t[maxn];
long long Ans,S,inv[maxn],D[maxn],invD[maxn];
long long tr[2][maxn];
long long qpow(long long x,int i){
	long long res=1;
	while(i){
		if(i&1){res=res*x%mod;}
		x=x*x%mod;i/=2;
	}
	return res;
}
int lowbit(int x){return x&(-x);}
void update(int x,int val){
    while(x<=n){
	    tr[1][x]=(tr[1][x]+val)%mod;
		tr[0][x]++;
		x+=lowbit(x);
	}
}
long long sum(int x,int opt){
	long long res=0;
	while(x){
		res=(res+tr[opt][x])%mod;
		x-=lowbit(x);
	}
	return res;
}
int main(){
	scanf("%d",&n);
	Ans=0;S=1;iv2=qpow(2,mod-2);
	inv[1]=1;for(int i=2;i<=n;i++){inv[i]=(inv[mod%i]*(mod-mod/i))%mod;}
	for(int i=1;i<=n;i++){scanf("%d",&a[i]);cnt[a[i]]++;}
	for(int i=n;i>=1;i--){cnt[i]=cnt[i]+cnt[i+1];}
	for(int i=n;i>=1;i--){S=S*(cnt[i]+i-n)%mod;}
	D[0]=t[0]=1;
	for(int i=1;i<=n;i++){
		long long tmp=(cnt[i]-n-1+i)*qpow(cnt[i]-n+i,mod-2)%mod;
		if(tmp==0){zero[i]=zero[i-1]+1;t[zero[i]]=i;D[i]=D[i-1];}
		else{zero[i]=zero[i-1];D[i]=D[i-1]*tmp%mod;}
		invD[i]=qpow(D[i],mod-2);
	}
	memset(tr,0,sizeof(tr));
	for(int i=1;i<=n;i++){
		Ans=(Ans+S*(sum(a[i],1)-sum(t[zero[a[i]]]-1,1)+mod)%mod*D[a[i]]%mod*iv2%mod)%mod;
		update(a[i],invD[a[i]]);
	}
	memset(tr,0,sizeof(tr));
	for(int i=n;i>=1;i--){
		Ans=(Ans+mod-S*(sum(a[i]-1,1)-sum(t[zero[a[i]]]-1,1)+mod)%mod*D[a[i]]%mod*iv2%mod)%mod;
		Ans=(Ans+S*sum(a[i]-1,0)%mod)%mod;
		update(a[i],invD[a[i]]);
	}
	printf("%lld\n",Ans);
	return 0;
}