code: func MultiAuthenticator(authenticators ...Authenticator) Authenticator {
  	return AuthenticatorFunc(func(username, password, otp string) (*Session, error) {
  		for _, authenticator := range authenticators {
  			session, err := authenticator.Authenticate(username, password, otp)
  
  			// No error so we're authenticated.
  			if err == nil {
  				return session, nil
  			}
  
  			// Try the next authenticator.
  			if err == ErrForbidden {
  				continue
  			}
  
  			// Bubble up the error.
  			return nil, err
  		}
  
  		// None succeeded.
  		return nil, ErrForbidden
  	})
  }
docs: // MultiAuthenticator returns an Authenticator that tries each Authenticator
  // until one succeeds or they all fail.
  //
  // It will proceed to the next authenticator when the error returned is
  // ErrForbidden. Any other errors are bubbled up (e.g. ErrTwoFactor).