#include<bits/stdc++.h>
#define to edge[i].v
#define mp make_pair
#define rint register int
#define debug(x) cerr<<#x<<"="<<x<<endl
#define fgx cerr<<"-------------"<<endl
#define N 1000000
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1e9+7;
int b[N],cnt[N],c0[N],c1[N],c2[N],pre[N],nxt[N];
inline int qpow(int x,int y){int A=1;for(;y;y>>=1,x=(ll)x*x%mod)if(y&1)A=(ll)A*x%mod;return A;}
struct node{int l,r,sum;}a[N];
void build(int l,int r,int o)
{	a[o].l=l; a[o].r=r; a[o].sum=0;
	if(l==r) return;
	int mid=(l+r)>>1;
	build(l,mid,o+o); build(mid+1,r,o+o+1);
}
void add(int pos,int k,int o)
{	if(a[o].l==pos&&pos==a[o].r){(a[o].sum+=k)%=mod;return;}
	int mid=(a[o].l+a[o].r)>>1;
	if(pos<=mid) add(pos,k,o+o);
	else add(pos,k,o+o+1);
	a[o].sum=(a[o+o].sum+a[o+o+1].sum)%mod;
}
int query(int l,int r,int o)
{	if(l>r) return 0;
	if(l==a[o].l&&a[o].r==r) return a[o].sum;
	int mid=(a[o].l+a[o].r)>>1;
	if(r<=mid) return query(l,r,o+o);
	else if(l>mid) return query(l,r,o+o+1);
	else return (query(l,mid,o+o)+query(mid+1,r,o+o+1))%mod;
}
int main()
{//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);
	int n,ans=0; cin>>n; c0[0]=c1[0]=pre[1]=1; nxt[n]=n;
	for(rint i=1;i<=n;i++) scanf("%d",&b[i]),cnt[b[i]]++;
	for(rint i=n-1;i>=1;i--) cnt[i]+=cnt[i+1]-1;
	for(rint i=1;i<=n;i++) c0[i]=(ll)c0[i-1]*cnt[i]%mod,c1[i]=(ll)c1[i-1]*max(cnt[i]-1,1)%mod;
	for(rint i=1;i<=n;i++) c1[i]=(ll)c1[i]*qpow(c0[i],mod-2)%mod,c2[i]=qpow(c1[i],mod-2);
	for(rint i=2;i<=n;i++) pre[i]=(cnt[i]==1?i:pre[i-1]);
	for(rint i=n-1;i>=1;i--) nxt[i]=(cnt[i+1]==1?i:nxt[i+1]);
	build(1,n,1); for(rint i=1;i<=n;i++)
	(ans+=(ll)query(pre[b[i]],b[i],1)*c1[b[i]]%mod)%=mod,add(b[i],c2[b[i]],1);
	build(1,n,1); for(rint i=1;i<=n;i++)
	(ans+=mod-(ll)query(b[i]+1,nxt[b[i]],1)*c2[b[i]]%mod)%=mod,add(b[i],c1[b[i]],1);
	ans=(ll)ans*qpow(2,mod-2)%mod;
	build(1,n,1); for(rint i=1;i<=n;i++) ans+=query(b[i]+1,n,1),add(b[i],1,1);
	printf("%d",(ll)ans*c0[n]%mod);
	return 0;
}
