#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7,mx=1e5+5;
void read(int &x){
int f=1;x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9')x=x*10+s-'0',s=getchar();
x*=f;
}
int n,nw[mx],num;
struct node{int x,id;}a[mx];
bool cmp(node a,node b){return a.x<b.x;}
long long t[mx];
inline int lowbit(int p){return p&(-p);}
inline void add(int p,int v){
while(p<=n){
t[p]=1ll*(t[p]+v)%mod;
p+=lowbit(p);
}
}inline long long get(int p){
long long ans=0;
while(p){
ans=(ans+t[p])%mod;
p-=lowbit(p);
}return ans;
}long long ans,x,sum,p[mx],xs;
bool vis[mx];
int main(){
read(n);
for(int i=1;i<=n;i++){
read(a[i].x);
a[i].id=i;
}sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
if(i!=1&&a[i].x==a[i-1].x) nw[a[i].id]=num;
else nw[a[i].id]=++num;
}for(int i=n;i;i--){
x=(sum-get(nw[i])+mod)%mod;
ans=(ans+x-p[nw[i]]+mod)%mod;
if(!vis[nw[i]]){
sum=(sum+x+1)%mod;
add(nw[i],x+1);
vis[nw[i]]=1;
}p[nw[i]]=x;
}printf("%lld\n",ans);
return 0;
}