#include<bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp> 
//#include <ext/pb_ds/tree_policy.hpp>
//#include <functional> // for less
//using namespace __gnu_pbds;

#define max_(x, y) (((x) > (y)) ? (x) : (y))
#define min_(x, y) (((x) < (y)) ? (x) : (y))
#define ___ ios_base::sync_with_stdio(false);cin.tie(NULL);
using namespace std;
#define Mx 5001
#define inf 1e15
const int MOD = 1e9+7;
const double pi = 2 * acos (0.0);

/*------------------------------Graph Moves----------------------------*/
//const int fx[]={+1,-1,+0,+0};
//const int fy[]={+0,+0,+1,-1};
//const int fx[]={+0,+0,+1,-1,-1,+1,-1,+1};   // Kings Move
//const int fy[]={-1,+1,+0,+0,+1,+1,-1,-1};  // Kings Move
//const int fx[]={-2, -2, -1, -1,  1,  1,  2,  2};  // Knights Move
//const int fy[]={-1,  1, -2,  2, -2,  2, -1,  1}; // Knights Move
/*---------------------------------------------------------------------*/


typedef long long  L;
//typedef tree<L,null_type,less<L>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;

L a1,a2,a3,b1,b2,b3,c,c1,c2,c3,d,d1,d2,d3,d4,d5,e1,e2,e3,f,h,k,l,m,n,m1,m2,n1,n2,o,p,p1,p2,p3,p4,q,q1,q2,q3,q4,r,s,t,
u,v,x,y,z,sum,mx=-inf,mn=inf,flg,flg1,flg2,id1,id2,id3,id4,lim;

//double rat;
vector<L>R,G,B;
char str[Mx];

void fun1(L id){
    // p1=upper_bound(G.begin(), G.end(),id)-G.begin();
    for(L j=0;j<d2;j++){
        if(G[j]<=id)continue;
        c1=(G[j]-id)+G[j];
        p2=upper_bound(B.begin(), B.end(),G[j])-B.begin();
        p3=lower_bound(B.begin(), B.end(),c1)-B.begin();
        c+=(d3-p2);
        if(p3<d3&&B[p3]==c1&&p3>=p2){
            c--;
        }

        c1=(G[j]+id);
        c2=(c1/2);
        p2=lower_bound(B.begin(), B.end(),G[j])-B.begin();
        p3=upper_bound(B.begin(), B.end(),id)-B.begin();
        if(p3<p2){
            c+=(p2-p3);
            if(c1%2==0){
                p4=lower_bound(B.begin(), B.end(),c2)-B.begin();
                if(p4<d3&&B[p4]==c2){
                    c--;
                }
            }
        }
    }
}
void fun2(L id){
    // p1=upper_bound(R.begin(), R.end(),id)-R.begin();
    for(L j=0;j<d1;j++){
        if(R[j]<=id)continue ;
        c1=(R[j]-id)+R[j];
        p2=upper_bound(B.begin(), B.end(),R[j])-B.begin();
        p3=lower_bound(B.begin(), B.end(),c1)-B.begin();
        c+=(d3-p2);
        if(p3<d3&&B[p3]==c1&&p3>=p2){
            c--;
        }

        c1=(R[j]+id);
        c2=(c1/2);
        p2=lower_bound(B.begin(), B.end(),R[j])-B.begin();
        p3=upper_bound(B.begin(), B.end(),id)-B.begin();
        if(p3<p2){
            c+=(p2-p3);
            if(c1%2==0){
                p4=lower_bound(B.begin(), B.end(),c2)-B.begin();
                if(p4<d3&&B[p4]==c2){
                    c--;
                }
            }
        }
    }
}
void fun3(L id){
    // p1=upper_bound(R.begin(), R.end(),id)-R.begin();
    for(L j=0;j<d1;j++){
        if(R[j]<=id)continue;
        c1=(R[j]-id)+R[j];
        p2=upper_bound(G.begin(), G.end(),R[j])-G.begin();
        p3=lower_bound(G.begin(), G.end(),c1)-G.begin();
        c+=(d2-p2);
        if(p3<d2&&G[p3]==c1&&p3>=p2){
            c--;
        }
        c1=(R[j]+id);
        c2=(c1/2);
        p2=lower_bound(G.begin(), G.end(),R[j])-G.begin();
        p3=upper_bound(G.begin(), G.end(),id)-G.begin();
        if(p3<p2){
            c+=(p2-p3);
            if(c1%2==0){
                p4=lower_bound(G.begin(), G.end(),c2)-G.begin();
                if(p4<d2&&G[p4]==c2){
                    c--;
                }
            }
        }
    }
}

void solve(){
    c=0;
    // l=strlen(str);
    for(L i=0;i<n;i++){
        if(str[i]=='R')R.push_back(i);
        else if(str[i]=='G')G.push_back(i);
        else B.push_back(i);
    }
    d1=R.size();
    d2=G.size();
    d3=B.size();
    for(L i=0;i<n;i++){
        if(str[i]=='R')fun1(i);
        else if(str[i]=='G')fun2(i);
        else fun3(i);
    }
    printf("%lld\n",c);
}
int main()
{
    scanf("%lld",&n);
    scanf("%s",str);
    solve();
    return 0;
}
/// lld I64d push_back() top() pop() insert() upper_bound() lower_bound() memset() max() min() scanf continue


Measured memory_bytes: 3808