I would suggest creating a team and assign a role with read/write privilege on the contact. Add all sales people to this team and share a contact with the team rather than individual people. This way you avoid sharing record with multiple users and it will improve the perforamnce as well.
You can use below sample code to share a record to team
var recordRef = new EntityReference(targetEntityName, targetRecordID);
var teamRef = new EntityReference("team", teamID);
AccessRights Access_Rights = new AccessRights();
Access_Rights = AccessRights.None;
//Read Access
if (read_Access == true)
Access_Rights = AccessRights.ReadAccess;
//Write Access (or) Read, Write Access
if (write_Access == true)
if (Access_Rights == AccessRights.None)
Access_Rights = AccessRights.WriteAccess;
else
Access_Rights = Access_Rights | AccessRights.WriteAccess;
//Append Access or all or any two accesses
if (append_Access == true)
if (Access_Rights == AccessRights.None)
Access_Rights = AccessRights.AppendToAccess | AccessRights.AppendAccess;
else
Access_Rights = Access_Rights | AccessRights.AppendToAccess | AccessRights.AppendAccess;
var grantAccess = new GrantAccessRequest
{
PrincipalAccess = new PrincipalAccess
{
AccessMask = Access_Rights,
Principal = teamRef
},
Target = recordRef
};
// Execute the Request
orgService.Execute(grantAccess);