#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
#define N 200010
using namespace std;
int n,m,cnt,ans,mo=1e9+7,x[N],y[N],c[N],mx[N],sum;
bool fl;
void add(int &a,int b){a+=b;if(a>=mo)a-=mo;}
struct bit
{
	int v[N];
	void clear()
	{
		for(int i=1;i<=n;i++)v[i]=0;
	}
	void mdf(int k,int vv)
	{
		for(;k<=n;k+=k&-k)add(v[k],vv);
	}
	int qy(int l,int r)
	{
		int s=0;
		l=min(l-1,n);r=min(r,n);
		for(;l;l-=l&-l)add(s,mo-v[l]);
		for(;r;r-=r&-r)add(s,v[r]);
		return s;
	}	
}bt,bc;
int pw(int i,int k)
{
	int a=1;
	while(k)
	{
		if(k&1)a=(ll)a*i%mo;
		i=(ll)i*i%mo;k>>=1;
	}
	return a;
}
int main()
{
	int i,s,a,b,j,k,ine2=pw(2,mo-2);
	scanf("%d",&n);sum=1;
	for(i=1;i<=n;i++)scanf("%d",&x[i]),c[x[i]]++;
	for(i=n;i;i--)
	{
		c[i-1]+=c[i];c[i]-=n-i;
		if(c[i]<1){fl=1;break;}
		sum=(ll)sum*c[i]%mo;
		y[i]=(ll)(c[i]-1)*pw(c[i],mo-2)%mo;
	}
	if(fl){printf("0");return 0;}
	for(i=n;i;i--)
	{
		if(!y[i+1])mx[i]=i;
		else mx[i]=mx[i+1];
	}
	for(i=2;i<=n;i++)
	if(y[i-1])y[i]=(ll)y[i-1]*y[i]%mo;
	
	for(i=1;i<=n;i++)if(!y[i])y[i]=1;
	for(i=n;i;i--)
	{
		k=bt.qy(x[i],mx[x[i]]);
		add(ans,(ll)k*pw(y[x[i]],mo-2)%mo*sum%mo*ine2%mo);
		bt.mdf(x[i],y[x[i]]);
	}
	bt.clear();
	for(i=1;i<=n;i++)
	{
		k=bt.qy(x[i]+1,mx[x[i]]);j=bc.qy(x[i]+1,n);
		add(ans,((ll)j*sum%mo+mo-(ll)k*pw(y[x[i]],mo-2)%mo*sum%mo*ine2%mo)%mo);
		bt.mdf(x[i],y[x[i]]);bc.mdf(x[i],1);
	}
	printf("%d",ans);
	return 0;
}