#include<bits/stdc++.h>
#define re register
#define int long long
using namespace std;
const int Maxn=1e5+5;
int ans;
int n,a[Maxn],b[Maxn];
map<int,int>pd;
int x[Maxn],y[Maxn];
int vis[Maxn];
int t[Maxn];
const int mod=1e9+7;
inline void add(int x,int d){
while(x<=n){t[x]=(t[x]+d)%mod;x+=x&-x;}
}
inline int query(int x){
int res=0;
while(x){res=(res+t[x])%mod;x-=x&-x;}
return res;
}
inline void memtree(int x){
while(x<=n){t[x]=0;x+=x&-x;}
}
void cdq(int l,int r){
if(l==r)return;
int mid=(l+r)>>1;
cdq(l,mid);cdq(mid+1,r);
int n1=0,n2=0;
for(int i=l;i<=mid;i++)
if(!vis[a[i]])x[++n1]=a[i],vis[a[i]]=1;
for(int i=l;i<=mid;i++)
vis[a[i]]=0;
for(int i=mid+1;i<=r;i++)
if(!vis[a[i]])y[++n2]=a[i],vis[a[i]]=1;
for(int i=mid+1;i<=r;i++)
vis[a[i]]=0;
for(int i=1;i<=n1;i++)add(x[i],query(x[i]-1)+1);
for(int i=1;i<=n2;i++)ans=(ans+query(y[i]-1))%mod;
for(int i=1;i<=n1;i++)memtree(x[i]);
}
signed main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]),b[i]=a[i];
sort(b+1,b+1+n);
int m=unique(b+1,b+1+n)-b;
for(int i=1;i<m;i++)pd[b[i]]=i;
for(int i=1;i<=n;i++)a[i]=pd[a[i]];
cdq(1,n);
printf("%d",ans);
return 0;
}