#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pii;
ll MOD= 1000000007;
const ll MAXN=3e5+5;
vector<ll> st(4*MAXN);
void update(ll x, ll y, ll d=1, ll l=1, ll r=MAXN)
{
if(l>x||r<x)return;
if(l==r)
{
st[d]=y;
return;
}
ll m=(l+r)/2;
update(x,y,2*d,l,m);
update(x,y,2*d+1,m+1,r);
st[d]=st[2*d]+st[2*d+1];
}
ll query(ll x, ll y, ll d=1, ll l=1, ll r=MAXN)
{
if(l>y||r<x)return 0;
if(l>=x&&r<=y)
{
return st[d];
}
ll m=(l+r)/2;
ll mew1=query(x,y,2*d,l,m);
ll mew2=query(x,y,2*d+1,m+1,r);
return mew1+mew2;
}
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
ll n; cin>>n;
vector<ll> p(n+1);
vector<ll> a(n+1);
vector<ll> ps(n+1),fct(n+1);
fct[0]=1;
for(ll i=1;i<=n;i++)cin>>p[i],ps[i]=p[i],fct[i]=(fct[i-1]*i)%MOD;
for(ll i=1;i<=n;i++)update(i,1);
sort(ps.begin()+1,ps.begin()+n+1);
for(ll i=1;i<=n;i++)
{
ll idx=lower_bound(ps.begin()+1,ps.begin()+n+1,p[i])-ps.begin();
a[i]=idx;
}
ll ans=1;
for(ll i=1;i<=n;i++)
{
ans=(ans+(query(1,a[i]-1)*fct[n-i])%MOD)%MOD;
update(a[i],0);
}
cout<<ans%MOD<<"\n";
}