SUMGCD-help

Here goes snippet, I got WA in two test cases

cin>>n;
        ll temp;
        set<ll>s;
        for(int i=0;i<n;++i){cin>>temp;s.insert(temp);}
        if(s.size()==1) cout<<2*(*max_element(all(s)))<<endl;
        else if(s.size()==2) cout<<*max_element(all(s))+*min_element(all(s))<<endl;
        else{
            auto it=s.rbegin();
            ll mx=*it;
            ll smx=*(--it);
            // cout<<mx<<" "<<smx;
            ll gc=0;
            for(auto it=s.begin();*it!=smx;++it){
                gc=__gcd(gc,*it);
            }
            // cout<<gc<<endl;
            ll a=__gcd(gc,mx)+smx;
            ll b=__gcd(gc,smx)+mx;
            cout<<max(a,b)<<endl;
        }