#include<bits/stdc++.h>
#define ll long long
using namespace std;
template<typename tn> void read(tn &a){
	tn x=0,f=1; char c=' ';
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) x=x*10+c-'0';
	a=x*f;
}
const int mod = 1e9+7,N = 201000;
ll fp(ll a,ll k){
	ll ans=1;
	for(;k;k>>=1,a=a*a%mod)
		if(k&1) ans=a*ans%mod;
	return ans;
}
int n,a[N],h[N],lim[N];
ll C[N],T[N],S,ans1,ans2,ans;
struct BIT{
	int c[N];
	BIT(){memset(c,0,sizeof(c));}
	void modify(int x,int k){
		for(int i=x;i<=n;i+=i&-i) c[i]=(c[i]+k)%mod;
	}
	int query(int x){
		int ans=0;
		for(int i=x;i;i-=i&-i) ans=(ans+c[i])%mod;
		return ans;
	}
};
void solve(ll&ans,int tag){
	BIT b;
	for(int i=1;i<=n;i++){
		ll s=b.query(a[i]-tag)-b.query(lim[a[i]]-1);
		ans=(ans+s*T[a[i]]%mod*S)%mod;
		b.modify(a[i],fp(T[a[i]],mod-2));
	}
}
int main(){
	read(n);
	for(int i=1;i<=n;i++) read(a[i]),h[a[i]]++;
	for(int i=n;i;i--)
		C[i]=C[i+1]+h[i];
	for(int i=1;i<=n;i++)
		C[i]-=n-i;
	S=1;
	for(int i=1;i<=n;i++) S=1ll*S*C[i]%mod;
	if(S==0){
		cout<<0<<'\n';
		return 0;
	}
	int lst=1;
	T[0]=1;
	for(int i=1;i<=n;i++){
		if(C[i]==1) T[i]=T[i-1],lst=i;
		else T[i]=T[i-1]*(C[i]-1)%mod*fp(C[i],mod-2)%mod;
		lim[i]=lst;
	}
	ll s=0;
	BIT b;
	for(int i=1;i<=n;i++)
		s+=b.query(n)-b.query(a[i]),b.modify(a[i],1);
	s%=mod;
	solve(ans1,0);
	reverse(a+1,a+n+1);
	solve(ans2,1);
	ans=(ans1*fp(2,mod-2)%mod+s*S%mod-ans2*fp(2,mod-2)%mod+mod)%mod;
	cout<<ans<<'\n';
	return 0;
}
