#include<bits/stdc++.h>
#define maxn 200009
#define LL long long
#define mod 1000000007
using namespace std;
int a[maxn],b[maxn],c[maxn],t[maxn],R[maxn],n;
inline int qpow(LL x,int y){
  LL ans=1;
  while(y){
    if(y&1) ans=ans*x%mod;
    x=x*x%mod;y>>=1;
  } return ans;
}
inline void add(int p,int w){
  for(int i=p;i<=n;i+=(i&-i)) t[i]=(t[i]+w)%mod;
}
inline int query(int p){
  int ret=0;
  for(int i=p;i;i-=(i&-i)) ret=(ret+t[i])%mod;
  return ret;
}
int main(){
  int S=1,ans=0;scanf("%d",&n);
  for(int i=1;i<=n;i++) scanf("%d",a+i),c[a[i]]++;
  for(int i=n-1;i>0;i--) c[i]+=c[i+1]-1;
  b[0]=1;
  for(int i=1;i<=n;i++){
    if(c[i]<=0) puts("0"),exit(0);
    S=(LL)S*c[i]%mod;
    b[i]=(LL)b[i-1]*(c[i]>1?c[i]-1:1)%mod*qpow(c[i],mod-2)%mod;
  }
  R[n]=n;
  for(int i=n-1;i>0;i--) R[i]=c[i+1]>1?R[i+1]:i;
  for(int i=n;i>=1;i--){
    LL tmp=(query(R[a[i]])-query(a[i]-1)+mod)%mod;
    ans=(tmp*qpow(b[a[i]],mod-2)+ans)%mod;
    add(a[i],b[a[i]]);
  }
  R[1]=1;
  for(int i=2;i<=n;i++) R[i]=c[i]>1?R[i-1]:i;
  memset(t,0,sizeof(t));
  for(int i=n;i>=1;i--){
    LL tmp=(query(a[i]-1)-query(R[a[i]]-1)+mod)%mod;
    ans=(mod-tmp*b[a[i]]%mod+ans)%mod;
    add(a[i],qpow(b[a[i]],mod-2));
  }
  ans=(LL)ans*(mod/2+1)%mod;
  memset(t,0,sizeof(t));
  for(int i=1;i<=n;i++)
    ans=(ans+i)%mod,ans=(ans-query(a[i])-1+mod)%mod,add(a[i],1);
  ans=(LL)ans*S%mod;
  printf("%d",ans);
  return 0;
}
